import { history } from 'umi';
import { extend } from 'umi-request';

import { notification } from 'antd';

//请求错误代码
const codeMessage = {
  200: '服务器成功返回请求的数据。',
  201: '新建或修改数据成功。',
  202: '一个请求已经进入后台排队（异步任务）。',
  204: '删除数据成功。',
  400: '发出的请求有错误，服务器没有进行新建或修改数据的操作。',
  401: '用户没有权限（令牌、用户名、密码错误）。',
  403: '用户得到授权，但是访问是被禁止的。',
  404: '发出的请求针对的是不存在的记录，服务器没有进行操作。',
  406: '请求的格式不可得。',
  410: '请求的资源被永久删除，且不会再得到的。',
  422: '当创建一个对象时，发生一个验证错误。',
  500: '服务器发生错误，请检查服务器。',
  502: '网关错误。',
  503: '服务不可用，服务器暂时过载或维护。',
  504: '网关超时。',
};

//异常处理程序
const errorHandler = (error: any) => {
  const { response } = error;
  // console.log(response, '=-----errorHandler----'); //请求处理失败统一处理
  // if(response === 200) {
  //   notification.error({
  //     description: '您的网络发生异常，无法连接服务器',
  //     message: '网络异常',
  //   });
  // }
  if (response && response.status) {
    const errorText = codeMessage[response.status] || response.statusText;
    const { status, url } = response;
    notification.error({
      message: `请求错误 ${status}: ${url}`,
      description: errorText,
    });
  } else if (!response) {
    notification.error({
      description: '您的网络发生异常，无法连接服务器',
      message: '网络异常',
    });
  }

  return response;
};

const request = extend({
  //prefix: 'http://127.0.0.1:8089/api/v1',
  timeout: 1000000,
  errorHandler,
  // credentials: 'include',
  // credentials: 'include', // 默认请求是否带上cookie
});
let token = '';
if (
  sessionStorage.getItem('bctoken') === undefined ||
  sessionStorage.getItem('bctoken') === 'undefined'
) {
  token = '0';
} else {
  token = JSON.parse(sessionStorage.getItem('bctoken') || '0');
}

// 请求拦截器添加token
request.interceptors.request.use((url?: string | undefined, options?: any | undefined) => {
  if (
    options.method === 'post' ||
    options.method === 'put' ||
    options.method === 'delete' ||
    options.method === 'get'
  ) {
    let headers = {};
    //todo:可以对options里面的数据进行优化
    if (options.requestType === 'form') {
      headers = {
        // 'Content-Type': 'application/json',
        // Accept: 'application/json',
        Authentication: token,
      };
    } else {
      headers = {
        'Content-Type': 'application/json',
        Accept: 'application/json',
        Authentication: token,
      };
    }
    // const headers = {
    //   'Content-Type': 'application/json',
    //   Accept: 'application/json',
    //   Authentication: token,
    // };
    if (url == '/api/user/login') {
      console.log(url, '----测试---');
      return { url, options };
    } else {
      return {
        url,
        options: { ...options, headers },
      };
    }
  } else {
    return { url, options };
  }
});
request.interceptors.response.use(async (response: any, options: any) => {
  if (response.status === 200) {
    if (options.responseType === 'blob') {
      // const restemp = await response.blob();
      // console.log(restemp);
      return response;
    }
    const res = await response.json();
    if (res.code !== 0 && res.code !== 200) {
      // 为了超时样式自定义的代码

      if (res.code === 99) {
        notification.error({
          description: res.data,
          message: res.message,
        });
        // 添加用户登录超时回到主页面
        history.push({
          pathname: `/user/login`,
        });
      } else {
        notification.error({
          description: res.data,
          message: res.message,
        });

        // return res;
      }

      //return res;
      // return Promise.reject(new Error(res.message || 'Error'));

      // errorHandler({
      //   response: response,
      // });
    } else {
      // console.log(res, "----res---")
      return res;
    }
  } else if (response.status === 500) {
    const res = await response.json();
    // console.log(res, '---');
    notification.error({
      description: res.message,
      message: '报错',
    });
  } else {
    errorHandler({
      response: response,
    });
  }
});
export default request;
